package com.zyj.adapter;

import com.zyj.model.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * DispatcherServlet中用于将各种处理器都适配成统一的HandlerAdapter类型
 * <p>
 * <p>
 * 标准（接口）可以随意制定：
 * <p>
 * spring制定的两种处理器规范【标准】，也可以自己定义处理器标准，没有统一的处理器标准，所以再处理器映射器中，映射器返回的是Object类型，前端控制器拿到之后需要进行类型转换
 * 接口1：HttpServletHandler(高仿了Servlet的写法)
 * void handleRequest(req,resp);
 * <p>
 * 接口2：SimpleControllerHandler
 * ModelAndView handleRequest(req,resp);
 * <p>
 * ModelAndView
 * Model--handler的处理结果
 * View--要将处理结果进行展示的视图名称【需要根据视图名称请求视图解析器得到视图对象，再请求视图渲染，返回渲染美化结果】
 * <p>
 * 该接口可以对ModelAndView的数据进行改变
 * <p>
 * 接口3：注解方式
 * <p>
 * spring要求，各个处理器类的标准没有任何关系，也就是没有统一的标准
 */
public interface HandlerAdapter {
    /**
     * 用于判断给定的处理器类型是否是我找个适配器支持的
     *
     * @param handler
     * @return
     */
    boolean supports(Object handler);

    ModelAndView handleRequest(Object handler, HttpServletRequest req, HttpServletResponse resp) throws Exception;
}
